Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / Sideband.git / files / sbapp / pyogg / flac_file_stream.py

Displaying Raw • Download


sbapp/pyogg/flac_file_stream.py f8b3e3760b831745cf10d97aeae64e9c00a136a9 (f8b3e376) Text, 4.98 KB

Tff7b72import T7ee787ctypes
Tff7b72from T7ee787itertools Tff7b72import Te6edf3chain

Tff7b72from T7ee787. Tff7b72import Te6edf3flac
Tff7b72from T7ee787.T7ee787pyogg_error Tff7b72import Te6edf3PyOggError

Tff7b72def Td2a8ff_to_char_pTb4b4b4(Te6edf3stringTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3ctypesTff7b72.Td2a8ffc_char_pTb4b4b4(Te6edf3stringTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72return Te6edf3ctypesTff7b72.Td2a8ffc_char_pTb4b4b4(Te6edf3stringTb4b4b4)

Tff7b72def Td2a8ff_resize_arrayTb4b4b4(Te6edf3arrayTb4b4b4, Te6edf3new_sizeTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4(Te6edf3arrayTff7b72.Td2a8ff_type_Tff7b72*Te6edf3new_sizeTb4b4b4)Tff7b72.Td2a8fffrom_addressTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffaddressofTb4b4b4(Te6edf3arrayTb4b4b4)Tb4b4b4)


Tff7b72class T56d364FlacFileStreamTb4b4b4:
Tff7b72def Td2a8ffwrite_callbackTb4b4b4(Tff7b72selfTb4b4b4,Te6edf3decoderTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3bufferTb4b4b4, Te6edf3client_dataTb4b4b4)Tb4b4b4:
Te6edf3multi_channel_buf Tff7b72= Te6edf3_resize_arrayTb4b4b4(Te6edf3bufferTff7b72.Td2a8ffcontentsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)
Te6edf3arr_size Tff7b72= Te6edf3frameTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffheaderTff7b72.Td2a8ffblocksize
Tff7b72if Te6edf3frameTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffheaderTff7b72.Td2a8ffchannels Tff7b72>Tff7b72= T79c0ff2Tb4b4b4:
Te6edf3arrays Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3frameTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffheaderTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4:
Te6edf3arr Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Te6edf3multi_channel_bufTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__int32Tff7b72*Te6edf3arr_sizeTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffcontents
Te6edf3arraysTff7b72.Td2a8ffappendTb4b4b4(Te6edf3arrTb4b4b4[Tb4b4b4:Tb4b4b4]Tb4b4b4)

Te6edf3arr Tff7b72= Tffa657listTb4b4b4(Te6edf3chainTff7b72.Td2a8fffrom_iterableTb4b4b4(Tffa657zipTb4b4b4(Tff7b72*Te6edf3arraysTb4b4b4)Tb4b4b4)Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffbuffer Tff7b72= Tb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__int16Tff7b72*Tffa657lenTb4b4b4(Te6edf3arrTb4b4b4)Tb4b4b4)Tb4b4b4(Tff7b72*Te6edf3arrTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbytes_written Tff7b72= Tffa657lenTb4b4b4(Te6edf3arrTb4b4b4) Tff7b72* T79c0ff2

Tff7b72elseTb4b4b4:
Te6edf3arr Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Te6edf3multi_channel_bufTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__int32Tff7b72*Te6edf3arr_sizeTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffcontents
Tff7b72selfTff7b72.Td2a8ffbuffer Tff7b72= Tb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__int16Tff7b72*Tffa657lenTb4b4b4(Te6edf3arrTb4b4b4)Tb4b4b4)Tb4b4b4(Tff7b72*Te6edf3arrTb4b4b4[Tb4b4b4:Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbytes_written Tff7b72= Te6edf3arr_size Tff7b72* T79c0ff2
Tff7b72return T79c0ff0

Tff7b72def Td2a8ffmetadata_callbackTb4b4b4(Tff7b72selfTb4b4b4,Te6edf3decoderTb4b4b4, Te6edf3metadataTb4b4b4, Te6edf3client_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftotal_samples Tff7b72= Te6edf3metadataTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffdataTff7b72.Td2a8ffstream_infoTff7b72.Td2a8fftotal_samples
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Te6edf3metadataTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffdataTff7b72.Td2a8ffstream_infoTff7b72.Td2a8ffchannels
Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72= Te6edf3metadataTff7b72.Td2a8ffcontentsTff7b72.Td2a8ffdataTff7b72.Td2a8ffstream_infoTff7b72.Td2a8ffsample_rate

Tff7b72def Td2a8fferror_callbackTb4b4b4(Tff7b72selfTb4b4b4,Te6edf3decoderTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3client_dataTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PyOggErrorTb4b4b4(Ta5d6ff"Ta5d6ffAn error occured during the process of decoding. Status enum: Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__StreamDecoderErrorStatusEnumTb4b4b4[Te6edf3statusTb4b4b4]Tb4b4b4)Tb4b4b4)

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdecoder Tff7b72= Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_newTb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffclient_data Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffc_void_pTb4b4b4(Tb4b4b4)

T8b949e#: Number of channels in audio file.
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Tff7b72None

T8b949e#: Number of samples per second (per channel). For
T8b949e# example, 44100.
Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72= Tff7b72None

Tff7b72selfTff7b72.Td2a8fftotal_samples Tff7b72= Tff7b72None

Tff7b72selfTff7b72.Td2a8ffbuffer Tff7b72= Tff7b72None

Tff7b72selfTff7b72.Td2a8ffbytes_written Tff7b72= Tff7b72None

Tff7b72selfTff7b72.Td2a8ffwrite_callback_ Tff7b72= Te6edf3flacTff7b72.Td2a8ffFLAC__StreamDecoderWriteCallbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffwrite_callbackTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffmetadata_callback_ Tff7b72= Te6edf3flacTff7b72.Td2a8ffFLAC__StreamDecoderMetadataCallbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmetadata_callbackTb4b4b4)

Tff7b72selfTff7b72.Td2a8fferror_callback_ Tff7b72= Te6edf3flacTff7b72.Td2a8ffFLAC__StreamDecoderErrorCallbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fferror_callbackTb4b4b4)

Te6edf3init_status Tff7b72= Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_init_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdecoderTb4b4b4,
Te6edf3_to_char_pTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffwrite_callback_Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffmetadata_callback_Tb4b4b4,
Tff7b72selfTff7b72.Td2a8fferror_callback_Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffclient_dataTb4b4b4)

Tff7b72if Te6edf3init_statusTb4b4b4: T8b949e# error
Tff7b72raise Te6edf3PyOggErrorTb4b4b4(Ta5d6ff"Ta5d6ffAn error occured when trying to open Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff: Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3flacTff7b72.Td2a8ffFLAC__StreamDecoderInitStatusEnumTb4b4b4[Te6edf3init_statusTb4b4b4]Tb4b4b4)Tb4b4b4)

Te6edf3metadata_status Tff7b72= Tb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_process_until_end_of_metadataTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdecoderTb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3metadata_statusTb4b4b4: T8b949e# error
Tff7b72raise Te6edf3PyOggErrorTb4b4b4(Ta5d6ff"Ta5d6ffAn error occured when trying to decode the metadata of Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4)

T8b949e#: Bytes per sample
Tff7b72selfTff7b72.Td2a8ffbytes_per_sample Tff7b72= T79c0ff2

Tff7b72def Td2a8ffget_bufferTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Returns the buffer.

Returns buffer (a bytes object) or None if all data has
been read from the file.

"""
T8b949e# Attempt to read a single frame of audio
Te6edf3stream_status Tff7b72= Tb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_process_singleTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdecoderTb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3stream_statusTb4b4b4: T8b949e# error
Tff7b72raise Te6edf3PyOggErrorTb4b4b4(Ta5d6ff"Ta5d6ffAn error occured when trying to decode the audio stream of Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4)

T8b949e# Check if we encountered the end of the stream
Tff7b72if Tb4b4b4(Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_get_stateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdecoderTb4b4b4) Tff7b72== T79c0ff4Tb4b4b4)Tb4b4b4: T8b949e# end of stream
Tff7b72return Tff7b72None

Te6edf3buffer_as_bytes Tff7b72= Tffa657bytesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbufferTb4b4b4)
Tff7b72return Te6edf3buffer_as_bytes

Tff7b72def Td2a8ffclean_upTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3flacTff7b72.Td2a8ffFLAC__stream_decoder_finishTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdecoderTb4b4b4)

Tff7b72def Td2a8ffget_buffer_as_arrayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Provides the buffer as a NumPy array.

Note that the underlying data type is 16-bit signed
integers.

Does not copy the underlying data, so the returned array
should either be processed or copied before the next call
to get_buffer() or get_buffer_as_array().

"""
Tff7b72import T7ee787numpy T8b949e# type: ignore

T8b949e# Read the next samples from the stream
Te6edf3buf Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_bufferTb4b4b4(Tb4b4b4)

T8b949e# Check if we've come to the end of the stream
Tff7b72if Te6edf3buf Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None

T8b949e# Convert the bytes buffer to a NumPy array
Te6edf3array Tff7b72= Te6edf3numpyTff7b72.Td2a8fffrombufferTb4b4b4(
Te6edf3bufTb4b4b4,
Te6edf3dtypeTff7b72=Te6edf3numpyTff7b72.Td2a8ffint16
Tb4b4b4)

T8b949e# Reshape the array
Tff7b72return Te6edf3arrayTff7b72.Td2a8ffreshapeTb4b4b4(
Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3bufTb4b4b4)
Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ffbytes_per_sample
Tff7b72/Tff7b72/ Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)
Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────